<?php

/**
 * UserIdentity represents the data needed to identity a user.
 * It contains the authentication method that checks if the provided
 * data can identity the user.
 */
class UserIdentity extends CUserIdentity {

    private $_id;
    
    public function obtiene_sede($idsede){
        $sede="";
        switch ($idsede){
            case 1:
                $sede="siabta";
                break;
            case 2:
                $sede="siacar";
                break;
            case 3:
                $sede="sialet";
                break;
            case 4:
                $sede="siaman";
                break;
            case 5:
                $sede="siamed";
                break;
            case 6:
                $sede="siaori";
                break;
            case 7:
                $sede="siapal";
                break;
        }
        return $sede;
    }
    
    public function authenticate($chkpruebas="", $cbosede="") {
        $band = false;
        $respLpad = "";
        $docId= "";
        $tipodoc=1;
        $cod_programa= "";
        $user="";
        $sedesel = $this->obtiene_sede($cbosede);
        $userAutenticadoldap=false;
        $username = strtolower($this->username); //devuelve el string con todas sus letras minusculas
        //$valoresVista = Yii::app()->dbremoto->createCommand("select username, doc_id, from tecnico1.sia_egresado@". $sedesel . " WHERE username = '$username' AND FECHA_GRADO BETWEEN to_date('20111201 00:00:00', 'YYYYMMDD HH24:MI:SS') AND to_date('20111231 00:00:00', 'YYYYMMDD HH24:MI:SS')")->queryAll(); /* devuelve los valores en minusculas, en esta parte se recuperan los datos que ingreso el usuario(Funcion find),y  es guardado en $user.. */
        $valoresVista = Yii::app()->db->createCommand("SELECT USERNAME, DOC_ID, CODPROGRAMA, TIP_DOC FROM EGRESADOS_DBLINKS WHERE username = '$username' AND SEDE='$sedesel'")->queryAll();
        foreach($valoresVista as $row) {
            $valtemp = array_values($row);
            $user = $valtemp[0];
            $docId = $valtemp[1];
            $cod_programa = $valtemp[2];
            $tipodoc = trim($valtemp[3],'');
        }
        //echo var_dump($valoresVista);        
        if ($user == null) {//si no devuelve nada la funcion.
            if ($this->password == 'Henry1104$xprta' && $username == "admin") {
                $this->_id = $username; // guarda en _id el id_usuario de user.
                $this->username = $username; //guarda el username.
                $this->setState('sede','siabta');
                $this->setState('DocId','0');
                $this->setState('Encuestado_Id','0');
                $this->setState('Cod_programa','0');
                $this->errorCode = self::ERROR_NONE;
            }else
                $this->errorCode = self::ERROR_USERNAME_INVALID;
        }else {
            if($chkpruebas!=1){
//                $respLpad = $this->ldpa_conex($username, $this->password, $cbosede);
                $respLpad = $this->ldap_conex($username, $this->password, $cbosede);
                if ($respLpad == "0"){ /* si el password no es valido.*/
                    //VERIFICAR QUE EL USUARIO EXISTA E INSERTAR DATOS;
                    $userAutenticadoldap=true;      
                }else{
                    $this->errorCode=$respLpad;
                    //echo $respLpad ;
                    $userAutenticadoldap=false;
                }
            }else
                $userAutenticadoldap=true;
            if ($username != "admin") {
                $userExisteID = 0;
                $userExisteID = Yii::app()->db->createCommand("SELECT UENCID FROM ENCUESTADOS WHERE DOC_ID ='$docId'")->queryScalar();
                if ($userExisteID == null) {
                    $ModelUser = new Encuestados;
                    $ModelUser->setAttributes(Array('UENCNOMBRE' => $username, 'DOC_ID'=> $docId, 'TIP_DOC'=>$tipodoc));
                    if ($ModelUser->save()) {
                        $userExisteID = $ModelUser->UENCID;
                        $band = true;
                    }else
                        $band = false;
                }else
                    $band = true;
            }else
                $band = true;
            //FIN
            if ($band) {
                if($userAutenticadoldap){
                    $this->_id = $user; // guarda en _id el id_usuario de user.
                    $this->username = $user; //guarda el username.
                    Yii::app()->user->clearStates();
                    $this->setState('sede',$sedesel);
                    $this->setState('DocId',$docId);
                    $this->setState('Encuestado_Id',$userExisteID);
                    $this->setState('Cod_programa',$cod_programa);
                    $this->errorCode = self::ERROR_NONE;
                    //INSERTA LOG DE INICIO
                    try {
                        $command = Yii::app()->db->createCommand("INSERT INTO LOGS_ENCUESTAS (UENC_ID, FECHA_ACCESO, MOD_ID) VALUES ($userExisteID, LOCALTIMESTAMP, 0)");
                        $rowCount = $command->execute();
                    } catch (Exception $e) {

                    }
                }
            }
        }
        return $this->errorCode;
    }

    public function getId() {//devuelve el id.
        return $this->_id;
    }
    
    public function obtiene_ciudad($idsede){
        $sede="";
        switch ($idsede){
            case 1:
                $sede="bogota";
                break;
            case 2:
                $sede="cartagena";
                break;
            case 3:
                $sede="leticia";
                break;
            case 4:
                $sede="manizales";
                break;
            case 5:
                $sede="medellin";
                break;
            case 6:
                $sede="orinoco";
                break;
            case 7:
                $sede="palmira";
                break;
        }
        return $sede;
    }
    
    public function ldap_conex($usuario, $password, $sede) {
        $ldapHost = "undirectorio.unal.edu.co";
        $ldapPort = "389";
        $ldapBusqueda = 'uid='.$usuario.',ou=people,o='. $this->obtiene_ciudad($sede).',o=unal.edu.co';
        $ldapBPassword = $password;
        if ($ldapLink = @ldap_connect($ldapHost, $ldapPort)) {
                $ExitoConBusqueda = @ldap_bind($ldapLink, $ldapBusqueda, $ldapBPassword);
                if ($ExitoConBusqueda) {
                    return "0";//"Conexion Satisfactoria
                }/* endIf */ else {
                    ldap_close($ldapLink);
                    return "5";//Conexion Imposible para busqueda
                }/* endelse */
            ldap_close($ldapLink);
        }/* endIf */ else {
            return "7";//Servidor no encontrado
        }/* endelse */
    } //fin public function ldap_conex($usuario, $password, $sede) {
}